package in.rob.client.page; import in.lib.Constants; import in.lib.event.NewPrivateMessageEvent; import in.lib.handler.streams.ChannelResponseHandler; import in.lib.helper.ResponseHelper; import in.lib.manager.APIManager; import in.lib.manager.UserManager; import in.model.Channel; import in.model.User; import in.rob.client.MessagesActivity; import in.rob.client.page.base.ChannelStreamFragment; import android.content.Intent; import android.view.View; import android.widget.AdapterView; import com.squareup.otto.Subscribe; /** * Fragment used for displaying posts in a fragment list * * Possible extra arguments: * <ul> * <li><b>{@linkplain Constants Constants.EXTRA_USER_ID}</b>: The {@link User} id to search against</li> * <li><b>{@linkplain Constants Constants.EXTRA_USER}</b>: The {@link User} to search against</li> * </ul> */ public class ChannelsPage extends ChannelStreamFragment { @Override public void fetchStream(String lastId, boolean append) { ChannelResponseHandler handler = new ChannelResponseHandler(getApplicationContext(), append); handler.setResponseKey(getResponseKeys()[0]); ResponseHelper.getInstance().addResponse(getResponseKeys()[0], handler, this); APIManager.getInstance().getMessageChannels(lastId, handler); } @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) { Channel channel = (Channel)getAdapter().getItem(position - getHeadedListView().getHeaderViewsCount()); Intent messageView = new Intent(getContext(), MessagesActivity.class); messageView.putExtra(Constants.EXTRA_CHANNEL, channel); startActivity(messageView); channel.setUnread(false); getAdapter().notifyDataSetChanged(); } @Override public void onDestroy() { writeToCache(getAdapter().getStream()); super.onDestroy(); } @Subscribe @Override public void onMessageReceived(NewPrivateMessageEvent m) { if (m.getMessage() != null) { // find the channel, update the recent message, bump item to top of adapter and refresh Channel c = (Channel)getAdapter().getItemById(m.getMessage().getChannelId()); c.setRecentMessage(m.getMessage()); c.getReaders().remove(m.getMessage().getPoster().getId()); c.getReaders().add(0, m.getMessage().getPoster().getId()); getAdapter().removeItem(c); getAdapter().prependItem(c); getAdapter().notifyDataSetChanged(); } } @Override public String getCacheFileName() { return String.format(Constants.CACHE_CHANNELS_LIST_NAME, UserManager.getUserId()); } @Override public String[] getResponseKeys() { return new String[]{String.format(Constants.RESPONSE_CHANNELS, UserManager.getUserId())}; } }